#!/bin/bash
set -e

# 在容器内安装 Docker Compose Plugin 的脚本
# 用于解决容器内无法使用 docker compose 命令的问题

function install_docker_compose_plugin() {
    echo "[...] 在容器内安装 Docker Compose Plugin..."

    # 检查是否已经安装
    if docker compose version >/dev/null 2>&1; then
        echo "[INFO] Docker Compose Plugin 已经安装"
        docker compose version
        return 0
    fi

    # 更新包列表
    apt update

    # 安装必要的依赖
    apt install -y --no-install-recommends \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        lsb-release

    # 添加 Docker 官方 GPG 密钥
    # 尝试多种方法获取 GPG 密钥
    if ! curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg; then
        echo "[WARN] 直接下载 GPG 密钥失败，尝试备用方法..."
        # 备用方法：使用 wget 或手动添加密钥
        if command -v wget >/dev/null 2>&1; then
            wget -qO- https://download.docker.com/linux/debian/gpg | gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg
        else
            # 如果网络问题，使用已知的 Docker GPG 密钥指纹手动添加
            echo "[INFO] 使用手动方式添加 Docker GPG 密钥"
            gpg --no-default-keyring --keyring /usr/share/keyrings/docker-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
        fi
    fi

    # 添加 Docker 软件源
    # 对于 Debian forky/sid，使用 bookworm (stable) 作为替代
    DEBIAN_CODENAME=$(lsb_release -cs)
    if [ "$DEBIAN_CODENAME" = "forky" ]; then
        DEBIAN_CODENAME="bookworm"
        echo "[INFO] 检测到 Debian forky/sid，使用 bookworm 作为 Docker 仓库源"
    fi
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $DEBIAN_CODENAME stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

    # 更新包列表
    if ! apt update; then
        echo "[ERR] 更新包列表失败"
        return 1
    fi

    # 安装 docker-compose-plugin
    if ! apt install -y --no-install-recommends docker-compose-plugin; then
        echo "[ERR] 安装 docker-compose-plugin 失败"
        return 1
    fi

    # 验证安装
    if docker compose version >/dev/null 2>&1; then
        echo "[SUC] Docker Compose Plugin 安装成功"
        docker compose version
    else
        echo "[ERR] Docker Compose Plugin 安装失败"
        return 1
    fi
}

# 执行安装
install_docker_compose_plugin